#include "baseserialport.h"
#include "mainwindow.h"
#include <QDebug>

BaseSerialport::BaseSerialport(
    QObject *parent)
    : QObject{parent}
{}

void BaseSerialport::open(
    const QString &portName,
    QSerialPort::BaudRate baudRate,
    QSerialPort::DataBits dataBits,
    QSerialPort::Parity parity,
    QSerialPort::StopBits stopBits)
{
    qDebug() << "open serialport";

    // （2）设置串口的工作参数
    m_port->setPortName(portName); // 选取串口

    m_port->setBaudRate(baudRate); // 设置波特率
    m_port->setDataBits(dataBits); // 设置数据位数
    m_port->setParity(parity);     // 设置奇校验类型
    m_port->setStopBits(stopBits); // 设置停止位长度

                                   // （3）打开串口
    m_port->open(QIODevice::ReadWrite);

    // （4）判断串口是否已打开
    if (m_port->isOpen())
    {
        qDebug() << "打开串口成功";
        emit openResult(true);
    }
    else
    {
        qDebug() << "打开串口失败";
        emit openResult(false);
    }
    connect(m_port, &QSerialPort::readyRead, this, &BaseSerialport::onReadyRead);
}

void BaseSerialport::close()
{
    if (m_port != nullptr)
    {
        m_port->close();
        // m_port->deleteLater();
        delete m_port;
        m_port = nullptr;
    }
    qDebug() << "close serialport";
}

void BaseSerialport::send(
    QByteArray data)
{
    qDebug() << QString("size:%1, data:%2, hex:%3")
                    .arg(m_port->write(data))
                    .arg(QString(data))
                    .arg(QString(data.toHex()));
}

void BaseSerialport::onReadyRead()
{
    // 接收到的数据，保存在 info
    QByteArray info = m_port->readAll();
    qDebug() << info;
    emit receiveok(info);
}

void BaseSerialport::receive()
{
    // qDebug() << m_port->readAll();

    // 接收到的数据，保存在 info
    QByteArray info = m_port->readAll();
    qDebug() << info;
    emit receiveok(info);
}

